@@ -85,6 +85,18 @@ def eqpt_onoff(request): |
||
85 | 85 |
return response() |
86 | 86 |
|
87 | 87 |
|
88 |
+@logit |
|
89 |
+def eqpt_remark(request): |
|
90 |
+ macid = request.POST.get('macid', '') |
|
91 |
+ remark = request.POST.get('remark', '') |
|
92 |
+ |
|
93 |
+ ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={ |
|
94 |
+ 'remark': remark, |
|
95 |
+ }) |
|
96 |
+ |
|
97 |
+ return response() |
|
98 |
+ |
|
99 |
+ |
|
88 | 100 |
@logit(body=True) |
89 | 101 |
def eqpt_list(request): |
90 | 102 |
point_id = request.POST.get('point_id', '') |
@@ -162,6 +174,83 @@ def eqpt_result(request): |
||
162 | 174 |
|
163 | 175 |
|
164 | 176 |
@logit |
177 |
+def screen_eqpt_result(request): |
|
178 |
+ point_id = request.POST.get('point_id', '') |
|
179 |
+ kw = request.POST.get('kw', '') |
|
180 |
+ page = request.POST.get('page', 1) |
|
181 |
+ num = request.POST.get('num', 20) |
|
182 |
+ |
|
183 |
+ try: |
|
184 |
+ point = IsolationPointInfo.objects.get(point_id=point_id, status=True) |
|
185 |
+ except IsolationPointInfo.DoesNotExist: |
|
186 |
+ return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) |
|
187 |
+ |
|
188 |
+ eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
|
189 |
+ macids = eqpts.values_list('macid', flat=True) |
|
190 |
+ |
|
191 |
+ logs = ThermometerMeasureInfo.objects.filter( |
|
192 |
+ point_id=point_id, |
|
193 |
+ point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
194 |
+ point_measure_window=point.point_measure_window, |
|
195 |
+ macid__in=macids, |
|
196 |
+ status=True, |
|
197 |
+ ).values('macid', 'temperature') |
|
198 |
+ logs = {log.get('macid'): log.get('temperature') for log in logs} |
|
199 |
+ |
|
200 |
+ infos = IsolationPointUserInfo.objects.filter(point_id=point_id, status=True).values('pk', 'fields') |
|
201 |
+ infos = {info.get('pk'): info.get('fields') for info in infos} |
|
202 |
+ |
|
203 |
+ total_active_eqpt_num = eqpts.count() |
|
204 |
+ has_upload_temperature_num = len(logs) |
|
205 |
+ temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5]) |
|
206 |
+ |
|
207 |
+ if kw: |
|
208 |
+ eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw)) |
|
209 |
+ eqpts = [{**eqpt.screen_data, **{ |
|
210 |
+ 'has_upload': eqpt.macid in logs, |
|
211 |
+ 'temperature': logs.get(eqpt.macid, 0), |
|
212 |
+ }, **{field.get('key', ''): field.get('value', '') for field in infos.get(eqpt.ipui_pk, {})}} for eqpt in eqpts] |
|
213 |
+ reminds = [{ |
|
214 |
+ 'name': eqpt.get('name'), |
|
215 |
+ 'room': eqpt.get('room'), |
|
216 |
+ 'content': eqpt.get('remark'), |
|
217 |
+ } for eqpt in eqpts if eqpt.get('remark')] |
|
218 |
+ eqpts, left = pagination(eqpts, page, num) |
|
219 |
+ |
|
220 |
+ # var name: String = "" |
|
221 |
+ # var room: String = "" |
|
222 |
+ # var phone: String = "" |
|
223 |
+ # var sex: String = "" |
|
224 |
+ # var age: String = "" |
|
225 |
+ # var temperature: String = "" |
|
226 |
+ # var status: String = "" |
|
227 |
+ # var remind: String = "" |
|
228 |
+ # var last_report_time: String = "" |
|
229 |
+ # var observed_days: String = "" |
|
230 |
+ eqpts = [{ |
|
231 |
+ 'name': eqpt.get('name', ''), |
|
232 |
+ 'room': eqpt.get('room', ''), |
|
233 |
+ 'phone': eqpt.get('phone', ''), |
|
234 |
+ 'sex': eqpt.get('sex', ''), |
|
235 |
+ 'age': eqpt.get('age', ''), |
|
236 |
+ 'temperature': eqpt.get('temperature', ''), |
|
237 |
+ 'status': ThermometerEquipmentInfo.final_temperature_status(eqpt.get('temperature', 0)), |
|
238 |
+ 'last_report_time': eqpt.get('last_submit_at', ''), |
|
239 |
+ 'observed_days': 1, |
|
240 |
+ } for eqpt in eqpts] |
|
241 |
+ |
|
242 |
+ return response(data={ |
|
243 |
+ 'eqpts': eqpts, |
|
244 |
+ 'left': left, |
|
245 |
+ 'reminds': reminds, |
|
246 |
+ 'total_active_eqpt_num': total_active_eqpt_num, |
|
247 |
+ 'has_upload_temperature_num': has_upload_temperature_num, |
|
248 |
+ 'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num, |
|
249 |
+ 'temperature_over_375': temperature_over_375, |
|
250 |
+ }) |
|
251 |
+ |
|
252 |
+ |
|
253 |
+@logit |
|
165 | 254 |
def upload_temperature(request): |
166 | 255 |
request.POST = request.POST or json.loads(request.body) |
167 | 256 |
macid = request.POST.get('mac', '') |
@@ -38,6 +38,7 @@ urlpatterns += [ |
||
38 | 38 |
urlpatterns += [ |
39 | 39 |
url(r'^eqpt/bind$', eqpt_views.eqpt_bind, name='eqpt_bind'), |
40 | 40 |
url(r'^eqpt/onoff$', eqpt_views.eqpt_onoff, name='eqpt_onoff'), |
41 |
+ url(r'^eqpt/remark$', eqpt_views.eqpt_remark, name='eqpt_remark'), |
|
41 | 42 |
url(r'^eqpt/list$', eqpt_views.eqpt_list, name='eqpt_list'), |
42 | 43 |
url(r'^eqpt/result$', eqpt_views.eqpt_result, name='eqpt_result'), |
43 | 44 |
] |
@@ -65,4 +66,6 @@ urlpatterns += [ |
||
65 | 66 |
url(r'^screen/login$', screen_views.screen_login, name='screen_login'), |
66 | 67 |
url(r'^screen/info/set$', screen_views.screen_info_set, name='screen_info_set'), |
67 | 68 |
url(r'^screen/info$', screen_views.screen_info, name='screen_info'), |
69 |
+ |
|
70 |
+ url(r'^screen/eqpt/result$', eqpt_views.screen_eqpt_result, name='screen_eqpt_result'), |
|
68 | 71 |
] |
@@ -172,6 +172,13 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
172 | 172 |
def __unicode__(self): |
173 | 173 |
return self.pk |
174 | 174 |
|
175 |
+ def final_temperature_status(temperature): |
|
176 |
+ if not temperature: |
|
177 |
+ return '-' |
|
178 |
+ if temperature > 37.5: |
|
179 |
+ return '异常' |
|
180 |
+ return '正常' |
|
181 |
+ |
|
175 | 182 |
@property |
176 | 183 |
def data(self): |
177 | 184 |
return { |
@@ -195,6 +202,13 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
195 | 202 |
'created_at': tc.local_string(utc_dt=self.created_at), |
196 | 203 |
} |
197 | 204 |
|
205 |
+ @property |
|
206 |
+ def screen_data(self): |
|
207 |
+ return { |
|
208 |
+ 'remark': self.remark, |
|
209 |
+ 'last_submit_at': tc.local_string(utc_dt=self.last_submit_at), |
|
210 |
+ } |
|
211 |
+ |
|
198 | 212 |
|
199 | 213 |
class ThermometerMeasureInfo(BaseModelMixin): |
200 | 214 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True) |
@@ -4,7 +4,7 @@ jsonfield==3.1.0 |
||
4 | 4 |
mysqlclient==2.0.3 |
5 | 5 |
paho-mqtt==1.5.1 |
6 | 6 |
pysnippets==1.1.4 |
7 |
-requests==2.25.1 |
|
7 |
+requests==2.26.0 |
|
8 | 8 |
rlog==0.3 |
9 | 9 |
-r requirements_dj.txt |
10 | 10 |
-r requirements_pywe.txt |